#include<iostream>
#include<time.h>
using namespace std;



enum
{
  NORMAL,
  DEBUG,
  WARMING,
  ERROR, 
  FATAL 
};

//在宏参当中带#,可以将宏名称转为字符串      __FILE__ 获取文件名      __LINE__行号的获取
//想打日志直接使用LOG即可,传入日志等级和日志消息
#define LOG(LEVEL, MESSAGE) log(#LEVEL, MESSAGE, __FILE__, __LINE__)    

//一旦出问题了,我们最想知道在哪个文件内部,第几行,出现了什么错误
void log(std::string level, std::string message, std::string file, int line)
{
    //time(nullptr):输出的是时间戳
    std::cout << "[" << level << "]" << "[" << time(nullptr) << "]" 
        << "[" << message << "]" << "[" << file << " : " << line << "]" << std::endl;
}

// enum
// {
//   NORMAL,
//   DEBUG,
//   WARMING,
//   ERROR, 
//   FATAL 
// };

// //开放式日志


// //日志一般需要的内容:日志等级 文件名 行号 时间 日志内容

// inline std::ostream& log(std::string grade,std::string file_name,int line)
// {
//     string message;
    
//     message += '[';
//     message += grade;
//     message += ']';

//     message += '[';
//     message += file_name;
//     message += ']';

//     message += '[';
//     message +=  to_string(line);
//     message += ']';

//     message += '[';
//     message += to_string(time(nullptr));
//     message += ']';
    
//     cout <<message ; //注意:这里不输出\n  将message暂存在cout的缓冲区,为的是和日志信息一起输出
//     return std::cout;
// }
// //后续调用方式: LOG(日志等级) <<"日志信息" << "\n" ;

// #define LOG(LEVEL) log(#LEVEL,__FILE__,__LINE__) 
